home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #148 (1991-11)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #148 (1991-11)(Rhein-Sieg-Soft).adf
/
SnakyDATA
/
SNAKY
< prev
next >
Wrap
Text File
|
1991-11-09
|
7KB
|
256 lines
CHDIR "SNAKYDATA"
w=14:REM Hier Anzahl der LEVEL eingeben
SCREEN 2,320,259,4,1
WINDOW 2,"SNAKY (C) 1990 by Thomas Mattel",(0,0)-(311,240),0,2
DIM p%(67,22),b(18,12),c(80,1),d(18,12),u$(19),v(19),a(9,2,2)
PALETTE 0,0,0,0:PALETTE 1,0,0,0:PALETTE 2,0,0,1:PALETTE 3,1,0,0
GOSUB palon
FOR f=0 TO 3:FOR g=0 TO 2:READ a(f,g,0):NEXT g,f
FOR f=0 TO 3:FOR g=0 TO 2:READ a(f,g,1):NEXT g,f
FOR f=0 TO 3:FOR g=0 TO 2:READ a(f,g,2):NEXT g,f
RESTORE
FOR f=0 TO 3:FOR g=0 TO 2:READ a(f+4,g,0):NEXT g,f
FOR f=0 TO 3:FOR g=0 TO 2:READ a(f+4,g,1):NEXT g,f
FOR f=0 TO 3:FOR g=0 TO 2:READ a(f+4,g,2):NEXT g,f
FOR f=0 TO 16 STEP 2:LINE (8+f,10+f)-(306-f,180-f),4,b:NEXT f
FOR f=0 TO 10 STEP 2:LINE (50+f,50-f)-(265-f,85+f),2,b:NEXT f
FOR f=0 TO 10 STEP 2:LINE (30+f,120-f)-(285-f,140+f),3,b:NEXT f
COLOR 7,0:LOCATE 9,18:PRINT "SNAKY"
COLOR 11,0:LOCATE 17,8:PRINT "(C) 1990 by Thomas Mattel"
GOSUB loadgfx
GOSUB loadhigh
title:
k=0:GOSUB loadlevel:FOR y=0 TO 12:FOR x=0 TO 18:b(x,y)=d(x,y):NEXT x,y
CLS:GOSUB paloff:GOSUB prtlev:GOSUB palon
COLOR 11,0:LOCATE 23,8:PRINT "PRESS BUTTON TO START GAME"
f=0
wait1:
f=f+1:IF STRIG(3)=-1 THEN GOTO gamestart
IF f<3500 THEN GOTO wait1
GOSUB paloff:GOSUB prthigh
wait2:
f=100:g=0
wait3:
FOR x=0 TO 3
PALETTE 4+x,a(x+g,0,0),a(x+g,1,0),a(x+g,2,0)
PALETTE 8+x,a(x+g,0,1),a(x+g,1,1),a(x+g,2,1)
PALETTE 12+x,a(x+g,0,2),a(x+g,1,2),a(x+g,2,2)
NEXT x:g=g+1+4*(g=4)
FOR y=0 TO 190:NEXT y
f=f-1:IF STRIG(3) GOTO gamestart
IF f GOTO wait3
GOTO title
gamestart:
CLS
k=0:REM level
j=1:REM 1 lives
t=0:REM score
i=0:REM time
nextlevel:
j=j+1:k=k+1:t=t+i*10*j:IF k=15 THEN k=1
IF k>1 THEN
FOR g=500 TO 50 STEP -4:FOR f=1200 TO 100 STEP -g:SOUND f,.15,100,0:NEXT f,g
END IF
GOSUB loadlevel
restart2:
i=o(0):REM time
s=o(1):REM diamonds
c(2,0)=o(2):c(2,1)=o(3):b(c(2,0),c(2,1))=17:REM koord kopf(aber code fuer body(17))
c(1,0)=o(4):c(1,1)=o(5):b(c(1,0),c(1,1))=17:REM mittelteil
c(0,0)=o(6):c(0,1)=o(7):b(c(0,0),c(0,1))=17:REM hinterteil (arsch)
m=o(8):REM momentane richtung x
n=o(9):REM momentane richtung y
FOR y=0 TO 12:FOR x=0 TO 18:b(x,y)=d(x,y):NEXT x,y:REM level aus zwischenspeicher laden
CLS:COLOR 3,0:LOCATE 26,10:PRINT "GET READY FOR LEVEL";k
GOSUB paloff:GOSUB initanz:GOSUB prtanz:GOSUB prtlev:GOSUB palon
FOR g=10 TO 40 STEP 2:FOR f=100+g*10 TO 400+g*10 STEP g:SOUND f,.15,100,1:NEXT f,g
x=o(2):REM momentane koordinaten
y=o(3):REM momentane koordinaten
init:
ds=0:REM schwanz
dk=2:REM kopf
q=0:REM flag wenn 1 dann hinterteil nicht loeschen (wenn diamant gefressen)
GOSUB initanz:REM anzeige initialisieren (score,level,timer...)
routine:
GOSUB prtanz:REM momentane auzeigewerte
REM FOR f=0 TO 300:NEXT f:REM warteschleife*********************************
trainer2:
i=i-1:IF i=-1 THEN GOTO livelost:REM timeout
l1=STICK(2)
l2=STICK(3)
IF l1=-1 AND l2=0 AND (b(x-1,y)=0 OR b(x-1,y)>16) THEN n=0:m=-1
IF l1=1 AND l2=0 AND (b(x+1,y)=0 OR b(x+1,y)>16) THEN n=0:m=1
IF l1=0 AND l2=-1 AND (b(x,y-1)=0 OR b(x,y-1)>16) THEN m=0:n=-1
IF l1=0 AND l2=1 AND (b(x,y+1)=0 OR b(x,y+1)>16) THEN m=0:n=1
REM delete last
REM IF q=1 THEN q=0:GOTO nodel immer del,wenn dia geffr, dann last again
PUT (c(ds,0)*16,c(ds,1)*16),p%(0,0),PSET
b(c(ds,0),c(ds,1))=0:REM schwanzcode =0
REM nachschieben
REM nodel:
dk=dk+1:IF dk=81 THEN dk=0
ds=ds+1:IF ds=81 THEN ds=0
REM FOR f=d TO 1 STEP -1
REM c(f,0)=c(f-1,0)
REM c(f,1)=c(f-1,1)
REM NEXT f
REM neue kopfpos
kopfpos1:
x=x+m:y=y+n
IF b(x,y)=22 THEN
ds=ds-1:IF ds=-1 THEN ds=80
q=1:s=s-1:t=t+10
FOR f=100 TO 400 STEP 15:SOUND f,.15,100,0:NEXT f:GOTO kopfpos2
END IF:REM diamant-gefressen-routine
IF b(x,y)=17 THEN LOCATE 22,17:GOTO livelost
IF b(x,y)>0 THEN x=x-m:y=y-n:GOSUB turn:GOTO kopfpos1
kopfpos2:
b(x,y)=17:REM neue kopfpos in spielfekd-martix eintragen ald body!
c(dk,0)=x:c(dk,1)=y:REM neue kopfpos in wurmdatenschlange eintragen
REM kopf zeichnen
PUT ((x-m)*16,(y-n)*16),p%(0,17),PSET:REM alte kopfpos wird body
PUT (x*16,y*16),p%(0,(18-(n=-1)-2*(m=1)-3*(n=1))),PSET:REM neue kopfpos
REM endtest
IF s=0 THEN GOTO nextlevel
GOTO routine
turn:
IF b(x,y-1)=0 OR b(x,y-1)=22 THEN m=0:n=-1:RETURN
IF b(x-1,y)=0 OR b(x-1,y)=22 THEN n=0:m=-1:RETURN
IF b(x,y+1)=0 OR b(x,y+1)=22 THEN m=0:n=1:RETURN
IF b(x+1,y)=0 OR b(x+1,y)=22 THEN n=0:m=1:RETURN
IF m=1 THEN m=0:n=-1:RETURN
IF n=-1 THEN n=0:m=-1:RETURN
IF m=-1 THEN m=0:n=1:RETURN
IF n=1 THEN n=0:m=1:RETURN
keywait: IF INKEY$="" THEN GOTO keywait
RETURN
trainer:
livelost:
j=j-1:FOR g=200 TO 10 STEP -10:FOR f=1000 TO 100 STEP-g:SOUND f,.15,100,1:NEXT f,g
IF j=-1 THEN
CLS:LOCATE 8,14:COLOR 3,0:PRINT "Game Over !!"
IF t<v(19) THEN
COLOR 12,0:LOCATE 13,14:PRINT "NO HIGHSCORE"
FOR g=50 TO 400 STEP 5:FOR f=1000 TO 100 STEP -g:SOUND f,.15,100,0:NEXT f,g:GOTO title
END IF
COLOR 12,0:LOCATE 15,3:PRINT "Enter your name: ";:LINE INPUT g$
IF LEN(g$)>12 THEN g$=LEFT$(g$,12)
FOR f=19 TO 1 STEP -1
IF v(f)<t THEN v(f)=v(f-1):u$(f)=u$(f-1)
IF v(f)>t THEN v(f+1)=t:u$(f+1)=g$:GOSUB paloff:GOSUB prthigh:GOSUB savehigh:GOTO wait2
NEXT f:v(0)=t:u$(0)=g$:GOSUB paloff:GOSUB prthigh:GOSUB savehigh:GOTO wait2
END IF
GOTO restart2
prtlev:REM routine prontet level auf screen
FOR y=0 TO 12:FOR x=0 TO 18:IF b(x,y)>0 THEN PUT (x*16,y*16),p%(0,b(x,y)),PSET
NEXT x,y
RETURN
paloff:
FOR f=4 TO 15:PALETTE f,0,0,0:NEXT f
RETURN
palon:
r=k-7*INT(k/7):IF r=0 THEN r=7
FOR f=4 TO 1 STEP-1:FOR g=0 TO 200:NEXT g
PALETTE f+3,f*.25*(r AND 1),f*.125*(r AND 2),f*.0625*(r AND 4):NEXT f
PALETTE 8,0,.5,1
PALETTE 9,0,0,1
PALETTE 10,1,0,0
PALETTE 11,1,1,0
PALETTE 12,.6,0,.6
RETURN
initanz:REM routine initialisiert die anzeige
COLOR 11,0:LOCATE 28,1:PRINT "Time: ";
COLOR 12,0:PRINT "LEVEL";k;:COLOR 8,0:PRINT " Diamonds:"
COLOR 3,0:LOCATE 29,1:PRINT "Lives: ";
COLOR 2,0:PRINT "Score:"
RETURN
prtanz:REM routine printet anzeige
COLOR 11,0:LOCATE 28,7:PRINT i
COLOR 8,0:LOCATE 28,36:PRINT s
COLOR 3,0:LOCATE 29,7:PRINT j
COLOR 2,0:LOCATE 29,33:PRINT t
RETURN
loadlevel:
n$=STR$(k):n$="levels/level_"+RIGHT$(n$,LEN(n$)-1)
OPEN n$ FOR INPUT AS #1
FOR f=0 TO 9:INPUT #1,o(f):NEXT f
FOR y=0 TO 12:FOR x=0 TO 18:INPUT #1,d(x,y):NEXT x,y:CLOSE #1
RETURN
loadgfx:
OPEN "GFX" FOR INPUT AS #1
FOR y=0 TO 22:FOR x=0 TO 67:INPUT #1,p%(x,y):NEXT x,y:CLOSE #1
RETURN
loadhigh:
OPEN "highscore" FOR INPUT AS #1
FOR f=0 TO 19:INPUT #1,u$(f):INPUT #1,v(f):NEXT f:CLOSE #1
RETURN
savehigh:
OPEN "HighScore" FOR OUTPUT AS #1
FOR f=0 TO 19:PRINT #1,u$(f):PRINT #1,v(f):NEXT f:CLOSE #1
KILL "HighScore.info"
RETURN
prthigh:
CLS:g$=" *************************************"
LOCATE 1,1:g=3
FOR f=1 TO 38:COLOR 8+g,0:PRINT MID$(g$,f,1);:g=g-1-4*(g=0):NEXT f
LOCATE 2,1:x=0:y=1
FOR f=0 TO 24:COLOR 11-x,0:PRINT " *";SPACE$(35);:COLOR 8+y,0:PRINT "*":x=x-1-4*(x=0):y=y-1-4*(y=0):NEXT f
LOCATE 27,1:g=3
FOR f=1 TO 38:COLOR 8+g,0:PRINT MID$(g$,f,1);:g=g+1+4*(g=3):NEXT f
LOCATE 3,14:g=3
FOR f=1 TO 13:COLOR 12+g,0:PRINT MID$("Best Snakers:",f,1);:g=g-1-4*(g=0):NEXT f
COLOR 8,0:g=3
FOR f=0 TO 19:g=g-1-4*(g=0):LOCATE 6+f,9+(f>8):COLOR 4+g,0:PRINT STR$(f+1);". ";u$(f);TAB(27);v(f):NEXT f
RETURN
DATA 1,.8,.8
DATA 1,.6,.6
DATA 1,.4,.4
DATA 1,.2,.2
DATA 0,0,.7
DATA 0,1,0
DATA .8,0,.6
DATA 1,1,0
DATA 0,.6,1
DATA 0,.5,.8
DATA 0,.4,.6
DATA 0,.3,.5